package com.teach.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.github.pagehelper.PageInfo;
import com.teach.dto.CommentsSearch;
import com.teach.entity.Comments;
import com.teach.exception.CodeException;

/**
 * <pre>
 * 评论业务逻辑接口
 * 创建时间 ：     2019年12月11日 下午4:52:27
 * 当前版本 ：     V1.0
 * 版权 ：            舒星所有
 * </pre>
 * @author 舒星
 *
 */
public interface CommentsService {
	/**
	 * 添加评论
	 * @param comment 评论实体对象
	 * @throws CodeException 可能发生的异常
	 */
	void commentsInsert(Comments comments) throws CodeException;
	
	/**
	 * 删除被评论者（一条新闻/商品/用户等）的所有评论（理论上的删除，将评论隐藏不显示，管理员还是可以找到）
	 * @param commentCommentator 被评论者的主键（一条新闻/商品/用户的主键等）
	 * @throws CodeException 可能发生的异常
	 */
	void commentsRemoveAll(Long commentCommentator) throws CodeException;
	/**
	 * 删除单条评论（理论上的删除，将评论隐藏不显示，管理员还是可以找到）
	 * @param userName 评论的用户名
	 * @param commentCommentator 被评论者的主键（一条新闻/商品/用户的主键等）
	 * @throws CodeException 可能发生的异常
	 */
	void commentsRemove(String userName,Long commentCommentator) throws CodeException;
	
	/**
	 * 分搜索查询评论（不含理论上删除的）
	 * @param search 搜索条件
	 * @return 分页查询结果
	 * @throws CodeException 可能发生的异常
	 */
	PageInfo<Comments> commentsPage(CommentsSearch search) throws CodeException;	
	
	/**
	 * 分搜索查询评论（包含理论上删除的）
	 * @param search 搜索条件
	 * @return 分页查询结果
	 * @throws CodeException 可能发生的异常
	 */
	PageInfo<Comments> commentsPageAll(CommentsSearch search) throws CodeException;
	
	/**
	 * 查询单个用户在某被评论者的所有评论 
	 * @param userName 评论的用户名
	 * @param commentCommentator 被评论者的主键（一条新闻/商品/用户的主键等）
	 * @return 查询的结果
	 * @throws CodeException 可能发生的异常
	 */
	List<Comments> commentsList(String userName,Long commentCommentator) throws CodeException;
	/**
	 * 查询某被评论者的所有评论 
	 * @param userName 评论的用户名
	 * @param commentCommentator 被评论者的主键（一条新闻/商品/用户的主键等）
	 * @return 查询的结果
	 * @throws CodeException 可能发生的异常
	 */
	List<Comments> commentsList1(Long commentCommentator) throws CodeException;
	/**
	 * 统计被评论者一共有多少条评论
	 * @param commentCommentator 被评论者主键
	 * @return 统计的数量
	 * @throws CodeException 可能发生的异常
	 */
	Long commentsCountByCommentator(Long commentCommentator) throws CodeException;
	/**
	 * 通过主键删除单条评论（理论上的删除，将评论隐藏不显示，管理员还是可以找到）
	 * @param commentId 评论id
	 * @throws CodeException 可能发生的异常
	 */
	void commentsRemove(Long commentId) throws CodeException;
	
	void commentsRemove(Long commentId,boolean falg) throws CodeException;
	
	Comments get(Long commentId);
}
